/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package appvideo.logica;

import java.sql.SQLException;
import java.util.Date;
import appvideo.persistencia.PersistenciaPromocion;
import appvideo.persistencia.Persistencia_Usuarios;
import java.util.List;
/**
 *
 * @author JAVA
 */
public class PromocionesPuntos extends Promociones {
    private int puntos; //Número de puntos que se otorgan por alquiler
    private boolean aplicar = false;
    private static final float PORCENTAJE_DESCUENTO_PUNTOS = 0.01f;

    public PromocionesPuntos(String nombre, Date fechaInicio, Date fechaFinal, boolean activa, int puntos, String tipo) {
        super(nombre, fechaInicio, fechaFinal, activa, tipo);
        this.puntos = puntos;
    }

    public PromocionesPuntos(int id, String nombre, Date fechaInicio, Date fechaFinal, boolean activa, int puntos, String tipo) {
        super(id, nombre, fechaInicio, fechaFinal, activa, tipo);
        this.puntos = puntos;
    }

    public PromocionesPuntos() {
    }
    
    public int getPuntos() {
        return puntos;
    }

    public void setPuntos(int puntos) {
        this.puntos = puntos;
    }

    public boolean isAplicar() {
        return aplicar;
    }

    public void setAplicar(boolean aplicar) {
        this.aplicar = aplicar;
    }
    
    
    @Override
    public double damePrecio(List<ProductoAlquilado> pA, Socio s) {
        double totalAlquiler=0.00;
        double precio=0.00; //Precio total = a.getProductosAlquilados();      
        Tarjeta t = s.getTarjetaSocio();
        
       
        
        for (ProductoAlquilado paL : pA) {            
            Producto p = paL.getProducto();
            Tarifa tA = p.getTarifa();

            totalAlquiler = totalAlquiler + tA.getPrecio();                                                      
        }     
        
        if(aplicar){
            double saldoPuntos = t.getPuntos()+this.damePuntos(pA.size());
            double descuento = saldoPuntos * PORCENTAJE_DESCUENTO_PUNTOS; 
            
            precio = totalAlquiler-descuento;
            //Pongo los puntos a cero, ya que acabo de usarlos todos
            t.setPuntos(damePuntos(0));
        }else{
            precio = totalAlquiler;
             //actualizar puntos(Los antiguos mas los nuevos)
            t.setPuntos(t.getPuntos()+damePuntos(pA.size()));
        }
        //Actualizar los datos en la BD
        Persistencia_Usuarios.updateTarjetaSocio(s);
        
      return precio;                                    
  }
    
    public int damePuntos(int numeroProductos){
        int puntoXalquiler = 0;
            puntoXalquiler = numeroProductos*this.puntos;
        return puntoXalquiler;
    }

    @Override
    public void insertaPromocion() throws SQLException {
        PersistenciaPromocion.insertaPuntos(this);
    }

    @Override
    public void visualizaPromocion() throws SQLException {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    
    @Override
    public List<Promociones> visualizarPromociones(String filtro) {
        return PersistenciaPromocion.getPromocioness(this, filtro);
    }    

    @Override
    public void modificaPromocion() throws SQLException {
        PersistenciaPromocion.modificaPuntos(this);
    }

    @Override
    public String toString() {
        return super.getId()+"\tTipo:" + super.getTipo() + "\tNombre:" + super.getNombre() + "\t\tNúmero de puntos:" + puntos + "";
    }

    @Override
    public List<Promociones> visualizarPromocionesActivas() {
        return PersistenciaPromocion.getPromocionesActivas(this);
    }
    
 public static PromocionesPuntos buscaPromocion(String cadena) {
        return (PromocionesPuntos)PersistenciaPromocion.buscaPromociones(cadena, new PromocionesPuntos());
    }    
 
 
    
}
